package pt.ipleiria.plp.threads;

import java.rmi.RemoteException;
import pt.ipleiria.plp.stub.ArrayOfString;
import pt.ipleiria.plp.stub.BlackSpot;
import pt.ipleiria.plp.stub.BlackSpotState;
import pt.ipleiria.plp.stub.OperationStatus;
import pt.ipleiria.plp.stub.SpottingSoap_Stub;
import pt.ipleiria.plp.stub.WasteVolume;

public class ValidateKey extends Thread {

    private String app;
    private boolean valid;
    CallbackValidKey obj;

    public ValidateKey(String app, CallbackValidKey obj) {
        this.app = app;
        this.obj = obj;

    }

    public void run() {
        valid = false;
        try {
            /**
             * Como não havia nenhum web serice para verificar se a chave era
             * valida tentou se pedir um block ao acaso apenas para verificar a
             * resposta do servidor, mas este não mandava nada identificativo
             * da autenticação não ser correcta. A unica hipotese era usar algo
             * que recorresse ao OperationStatus, e como tal foi escolido o serviço
             * criar.
             */
            SpottingSoap_Stub service = new SpottingSoap_Stub();

            String guid = "12345678-1234-1234-1234-123456789012";
            float lat = 40;
            float longe = -8;

            BlackSpot bs = new BlackSpot(lat, longe, WasteVolume.Small,
                    new String[]{"Class2Paper"}, 2, "20", "TEST", "TEST",
                    new ArrayOfString(new String[]{"TEST"}), "2009-12-23T21:05:22",
                    "2009-12-23T21:05:22", BlackSpotState.Resolved, guid);

            OperationStatus op = service.newBlackSpot(bs, app);

            if (op != null && op.isOperationSuceeded()) {

                valid = true;

            } else {

                valid = false;
                if (op != null) {
                    System.err.println("error: " + op.getErrorMessage());
                } else {
                    System.err.println("error: op null");
                }
                obj.returnValidation(isValid());
                return;

            }

            if (isValid()) {

                service.deleteBlackSpot(op.getNewId(), app);

            }

        } catch (RemoteException ex) {
            ex.printStackTrace();
        }
        obj.returnValidation(isValid());
    }

    /**
     * @return the valid
     */
    public boolean isValid() {
        return valid;
    }
}
